// 报关单表头校验规则
// 校验运费 保险费  杂费 第二项
function validateRate (value, type) {
    if (!/^\d+(\.\d*)?$/.test(value)) return '请输入大于0的数字'
    if (type == 1) {
        const num = Number(value)
        if (num < 0.0001 || num > 99) return '录入值范围为0.0001-99'
    } else if (type == 2) {
        if (!/^(?!^0*(\.0*)?$)(\d{1,10}(\.\d{1,4})?)$/.test(value)) return '整数最多录入10位，小数点后面最多4位，且大于0'
    } else {
        if (!/^(?!^0*(\.0*)?$)(\d{1,12}(\.\d{1,4})?)$/.test(value)) return '整数最多录入12位，小数点后面最多4位，且大于0'
    }
    return ''
}

// 信用代码
function tradeCoScc (value) {
    let err = ''
    if (value) {
        if (!/^([A-Z0-9]{18}|NO)$/.test(value)) {
            err = '统一信用代码数字或字母，长度等于18'
        }
    } else {
        err = '此项必填'
    }
    return err
}
// 海关编码
function tradeCode (value) {
    let err = ''
    if (value) {
        if (!/^([A-Z0-9]{10})$/.test(value)) {
            err = '海关代码数字或大写字母，长度等于10'
        } else if (/^\d{5}8/.test(value)) {
            err = '海关编码第6位不能为数字“8”'
        }
    } else {
        err = '此项必填'
    }
    return err
}
// 检验检疫代码
function tradeCiqCode (value) {
    let err = ''
    if (value && !/^([A-Z0-9]{10})$/.test(value)) {
        err = '检验检疫代码数字或大写字母，长度等于10'
    }
    return err
}
// 企业名称
function tradeName (value) {
    let err = ''
    if (value) {
        const len = value.length
        if (len > 60 || len < 4) {
            err = '企业名称长度>=4或=<60'
        }
    } else {
        err = '此项必填'
    }
    return err
}
const wtReg = /^(?!^0*(\.0*)?$)(\d{1,14}(\.\d{1,5})?)$/

// 海关校验
function checkCustom (value) {
    let err = value ? '' : '此项必填'
    if (!err) {
        if (/00$/.test(value)) {
            err = '后两位不能为0'
        } else if (
            ['35029', '44039', '44049', '44059', '46901'].includes(value)
        ) {
            err = '此关区不可选'
        }
    }
    return err
}

export default {
    // 运费
    feeMark (value) {
        let err = ''
        if (this.feeMarkRequired && !value) {
            err = '此项必填'
        }
        return err
    },
    feeRate (value) {
        const { feeMark } = this.CustomsDeclareDate
        let err = ''
        if (value) {
            err = validateRate(value, feeMark)
        }
        return err
    },
    // 运费
    insurMark (value) {
        let err = ''
        if (this.insurMarkRequird && !value) {
            err = '此项必填'
        }
        return err
    },
    insurRate (value) {
        const { insurMark } = this.CustomsDeclareDate
        let err = ''
        if (value) {
            err = validateRate(value, insurMark)
        }
        return err
    },
    // 杂费
    otherRate (value) {
        const { otherMark } = this.CustomsDeclareDate
        let err = ''
        if (value) {
            err = validateRate(value, otherMark)
        }
        return err
    },
    tradeCoScc,
    tradeCode,
    tradeCiqCode,
    tradeName,
    ownerCodeScc: tradeCoScc,
    ownerCode: tradeCode,
    ownerCiqCode: tradeCiqCode,
    ownerName: tradeName,
    overseasConsignorCode (value) {
        let err = ''
        if (value && !/^[A-Z0-9]{0,64}$/.test(value)) {
            err = '请输入数字或大写字母，最大长度64'
        }
        return err
    },
    overseasConsignorEname (value) {
        let err = ''
        if (value) {
            if (value.length > 100) {
                err = '企业名称长度不能大于100位'
            }
        } else {
            err = '企业名称为必填项,若没有，填报NO'
        }
        return err
    },
    // 表头毛重(KG)
    grossWet (value) {
        const { containerType } = this.declareDate
        const flag = ['11', '12', '13', '32'].includes(containerType) && Number(value) > 26000
        let err = ''
        if (value) {
            if (wtReg.test(value)) {
                if (flag) {
                    err = '毛重超过26000KG，请检查'
                }
            } else {
                err = '请输入整数最多14位，小数最多5位且大于0的数字'
            }
        } else {
            err = '此项必填'
        }
        // 校验集装箱规格
        if (containerType) {
            const msg = flag ? '毛重超过26000KG，请检查' : ''
            this.containerTips.containerType = msg
        }
        return err
    },
    // 表头净重(KG)
    netWt (value) {
        let err = ''
        if (value) {
            if (!wtReg.test(value)) err = '请输入整数最多14位，小数最多5位且大于0的数字'
        } else {
            err = '此项必填'
        }
        return err
    },
    tradeMode (value) {
        return value ? '' : '监管方式必填'
    },
    custId (value) {
        return value ? '' : '委托单位必填'
    },
    declPort: checkCustom,
    iePort: checkCustom,
    manualNo (value) {
        let err = ''
        if (value) {
            if (!/^[0-9A-Z]{12}$/.test(value)) {
                err = '备案号由大写字母+数字组成，且必须12位'
            } else if (!['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'Y', 'Z', 'Q'].includes(value[0])) {
                err = '首位必须以A，B，C，D，E，F，G，H，J，K，Y，Z，Q字母开头'
            }
        }
        return err
    },
    contrNo (value) {
        return value && value.length > 32 ? '合同协议号的长度小于等于32位' : ''
    },
    ieDate (value) {
        const flag = this.CustomsDeclareDate.ieFlag == 'I'
        return flag
            ? value ? '' : '日期必填'
            : ''
    },
    agentCodeScc: tradeCoScc,
    agentCode: tradeCode,
    declCiqCode: tradeCiqCode,
    agentName: tradeName,
    trafMode (value) {
        return value ? '' : '此项必填'
    },
    trafName (value) {
        return value && value.length > 32
            ? '运输工具名称的长度小于等于32位'
            : ''
    },
    voyageNo (value) {
        return value && value.length > 32 ? '航次号长度小于等于32位' : ''
    },
    billNo (value) {
        return value && value.length > 32 ? '提运单号长度小于等于32位' : ''
    },
    cutMode (value) {
        return ''
    },
    licenseNo (value) {
        return value && !/^[0-9a-zA-Z-]+$/.test(value)
            ? '许可证号字母+数字，最长20位'
            : ''
    },
    tradeCountry (value) {
        return value ? '' : '此项必填'
    },
    distinatePort (value) {
        return value ? '' : '此项必填'
    },
    transMode (value) {
        return value ? '' : '此项必填'
    },
    feeCurr (value) {
        return ''
    },
    insurCurr (value) {
        return ''
    },
    // 杂费
    otherMark (value) {
        return ''
    },
    otherCurr (value) {
        return ''
    },
    packNo (value) {
        return value && value !== 0
            ? /^[1-9]\d{0,8}$/.test(value) ? '' : '件数 >= 1 的整数，最大长度9位'
            : '件数为必填项'
    },
    wrapType (value) {
        return value ? '' : '包装种类必填'
    },
    tradeCountryNo (value) {
        return value ? '' : '此项必填'
    },
    entyPortCode (value) {
        return value ? '' : '此项必填'
    },
    goodsPlace (value) {
        const flag = this.CustomsDeclareDate.ieFlag == 'I'
        return value
            ? value.length > 100 ? '货物存放地点长度小于等于100' : ''
            : flag ? '货物存放地点为必填项' : ''
    },
    despPortCode (value) {
        return value ? '' : '此项必填'
    },
    entryType (value) {
        return value ? '' : '此项必填'
    },
    notes (value) {
        return ''
    },
    billType (value) {
        return value ? '' : '此项必填'
    },
    markNo (value) {
        return value ? '' : '标记唛码必填'
    },
    orgCode (value) {
        const err = this.declareTips && this.declareTips.orgCode || ''
        return value ? '' : err
    },
    vsaOrgCode (value) {
        const err = this.declareTips && this.declareTips.vsaOrgCode || ''
        return value ? '' : err
    },
    inspOrgCode (value) {
        const err = this.declareTips && this.declareTips.inspOrgCode || ''
        return value ? '' : err
    },
    purpOrgCode (value) {
        const err = this.declareTips && this.declareTips.purpOrgCode || ''
        return value ? '' : err
    },

    correlationDeclNo (value) {
        return value && value.length > 18 ? '关联号码长度不能大于18位' : ''
    },
    correlationReasonFlagName (value) {
        return value && value.length > 20 ? '关联理由长度不能大于20位' : ''
    },
    despDate (value) {
        const err = this.declareTips && this.declareTips.despDate || ''
        return value ? '' : err
    },
    origBoxFlagName (value) {
        return ''
    }
}
